package com.qcby.demo.proxyaop.interceptor;

import com.qcby.demo.proxyaop.proxy.jdk.TvHandler;
import com.qcby.demo.proxyaop.proxy.star.IAdvertisement;
import com.qcby.demo.proxyaop.proxy.star.JiaLing;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Proxy;

/**
 * @className: JdkDynamicProxy
 * @description:jdk动态代理
 * @author: lxt
 * @create: 2021-05-12 15:34
 **/
@Slf4j
public class InterceptorJdkDynamicProxy {


    public static void main(String[] args) {
        JiaLing jiaLing = new JiaLing();
        // 实例化拦截器  =>  一般开放给研发人员，由研发人员自定义实现逻辑
        QcbyInterceptor qcbyInterceptor = new QcbyInterceptor();
        // 绑定贾玲和代理类的关系 带有拦截器
        InterceptorHandler interceptorHandler = new InterceptorHandler(jiaLing,qcbyInterceptor);
        //生成的代理对象也和真实对象实现了同样的接口，因此可用接口来接受对象
        IAdvertisement advertisement = (IAdvertisement) Proxy.newProxyInstance(jiaLing.getClass().getClassLoader()
                , jiaLing.getClass().getInterfaces(),interceptorHandler);
        //执行代理对象的方法
        advertisement.display();
//        String re = advertisement.displayRe();
//        log.info("re:{}",re);
    }
}
